package cn.zclong.student.web.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.commons.CommonUtils;
import cn.itcast.servlet.BaseServlet;
import cn.zclong.student.domain.Student;
import cn.zclong.student.service.StuException;
import cn.zclong.student.service.StuService;

/**
 * web层 Student表述层
 */
public class StuServlet extends BaseServlet {
	private StuService stuService = new StuService();

	// 报名
	public String regist(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 * 1，封装表单数据到form对象中 2，补全:sid 3，输入校验 >保存错误信息、form到request域，转发到regist.jsp
		 * 4，调用service方法完成注册
		 */
		// 封装表单数据
		/*
		 * toBean(Map, Class<T>)：把Map转换成指定类型的Bean对象。
		 * 通常用来获取表单数据（request.getParameterMap()）封装到JavaBean中，底层使用了common-
		 * beanutils。 注意，本方法要求map中键的名称要与Bean的属性名称相同才能完成映射，否则不能完成映射。
		 */
		Student form = CommonUtils.toBean(request.getParameterMap(), Student.class);
		// 补全sid
		// lString uuid()：生成长度32的随机字符，通常用来做实体类的ID。底层使用了UUID类完成；
		form.setSid(CommonUtils.uuid());
		/*
		 * 输入校验 1，创建一个Map,用来封装错误信息，其中key为表单字段名称，值为错误信息
		 */
		Map<String, String> errors = new HashMap<String, String>();

		// 从form中获取数据进行校验

		String stuid = form.getStuid();
		if (stuid == null || stuid.trim().isEmpty()) {
			errors.put("stuid", "学号不能为空");
		} else if (stuid.length() != 8) {
			errors.put("stuid", "学号为八位数");
		}

		String stuname = form.getStuname();
		if (stuname == null || stuname.trim().isEmpty()) {
			errors.put("stuname", "姓名不能为空");
		} else if (stuname.length() < 1 || stuname.length() > 4) {
			errors.put("stuname", "姓名的长度应在2~4位之间");
		}

		String stuclass = form.getStuclass();
		if (stuclass == null || stuclass.trim().isEmpty()) {
			errors.put("stuclass", "班级不能为空");
		} else if (stuclass.length() < 5) {
			errors.put("stuclass", "班级的长度不能小于5");
		}

		String major = form.getMajor();
		if (major == null || major.trim().isEmpty()) {
			errors.put("major", "专业不能为空");
		} else if (major.length() < 2) {
			errors.put("major", "专业名称的长度不能小于2");
		}

		/*
		 * 判断是否存在错误信息
		 */
		if (errors.size() > 0) {
			request.setAttribute("errors", errors);
			request.setAttribute("form", form);
			return "f:/jsps/user/stu_regist.jsp";
		}

		/*
		 * 如果不存在错误信息，调用service方法添加该学生
		 */
		try {
			stuService.regist(form);
		} catch (StuException e) {
			/*
			 * 1，保存异常信息 2，保存form 3，转发到stu_regist.jsp
			 */
			request.setAttribute("msg", e.getMessage());
			request.setAttribute("form", form);
			return "f:/jsps/user/stu_regist.jsp";
		}
		// 报名成功
		request.setAttribute("msg", "恭喜你，报名成功");
		return "f:/jsps/user/stu_regist.jsp";
	}

}
